import java.sql.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Scanner;

/**
 * 图书管理系统
 */
public class Main {
    // 入口函数
    public static void main(String[] args) throws Exception {
        System.out.println(getDateByDay(15));


        // 读取控制台输入的对象
        Scanner scanner = new Scanner(System.in);

        // 1. 注册驱动
        Class.forName("com.mysql.jdbc.Driver");


        // 2. 获取连接对象
        // 备注：characterEncoding=utf-8 解决JDBC和数据库传输中文乱码问题
        String url = "jdbc:mysql://127.0.0.1:3307/tb_user?useSSL=false&characterEncoding=utf-8";
        Connection connection = DriverManager.getConnection(url, "root", "123456");
        // 3. 获取执行SQL的对象
        Statement statement = connection.createStatement();

        // 1. 登录
        while (true) {
            System.out.println("********** 欢迎访问图书管理系统 **********");
            System.out.print("请输入账号：");
            String account = scanner.nextLine();
            System.out.print("请输入密码：");
            String password = scanner.nextLine();

            // 拼接SQL
            String sql = "select * from user where account = '" + account + "' and password = '" + password + "';";

            // 执行SQL并且获取结果
            ResultSet result = statement.executeQuery(sql);

            if (result.next()) {
                System.out.println("姓名为【" + result.getString(2) + "】的用户，登录成功！");
                break;
            } else {
                System.out.println("账号或密码错误，请重新输入！");
            }
        }

        while (true) {
            System.out.println("**********************************************");
            System.out.println("* 1. 人员管理");
            System.out.println("* 2. 图书管理");
            System.out.println("* 3. 退出登录");
            System.out.println("**********************************************");
            System.out.print("请输入指令：");
            String input = scanner.nextLine();
            switch (input) {
                case "1": // 人员管理：增删改查
                    while (true) {
                        System.out.println("**********************************************");
                        System.out.println("* 1. 新增人员");
                        System.out.println("* 2. 删除人员");
                        System.out.println("* 3. 修改人员");
                        System.out.println("* 4. 查询人员");
                        System.out.println("* 5. 返回上一级");
                        System.out.println("* 6. 退出登录");
                        System.out.println("**********************************************");
                        System.out.print("请输入指令：");
                        input = scanner.nextLine();

                        // 是否返回上一级
                        boolean isGoBack = false;

                        switch (input) {
                            case "1": // 新增人员
                                System.out.print("请输入姓名：");
                                String addUserName = scanner.nextLine();
                                System.out.print("请输入性别：");
                                String addUserGender = scanner.nextLine();
                                System.out.print("请输入年龄：");
                                int addUserAge = Integer.valueOf(scanner.nextLine()); // Integer.valueOf() ==> 可以将字符串转换成整型
                                System.out.print("请输入账号：");
                                String addUserAccount = scanner.nextLine();
                                System.out.print("请输入密码：");
                                String addUserPassword = scanner.nextLine();

                                String addUserSQL = "insert into user values(null, '" + addUserName + "', '" + addUserGender + "', " + addUserAge + ", '" + addUserAccount + "', '" + addUserPassword + "');";

                                statement.executeUpdate(addUserSQL);
                                System.out.println("新增成功！");
                                break;
                            case "2": // 删除人员
                                System.out.print("请输入要删除人员的ID：");
                                String deleteUserId = scanner.nextLine();

                                String deleteUserSQL = "delete from user where id = " + deleteUserId;

                                statement.executeUpdate(deleteUserSQL);
                                System.out.println("删除成功！");
                                break;
                            case "3": // 修改人员
                                System.out.print("请输入ID：");
                                String updateUserId = scanner.nextLine();//可以加一个确认id是否存在的判断，如果说不存在就反映回去
                                System.out.print("请输入姓名：");
                                String updateUserName = scanner.nextLine();
                                System.out.print("请输入性别：");
                                String updateUserGender = scanner.nextLine();
                                System.out.print("请输入年龄：");
                                int updateUserAge = Integer.valueOf(scanner.nextLine()); // Integer.valueOf() ==> 可以将字符串转换成整型
                                System.out.print("请输入账号：");
                                String updateUserAccount = scanner.nextLine();
                                System.out.print("请输入密码：");
                                String updateUserPassword = scanner.nextLine();

                                String updateUserSQL = "update user set name = '" + updateUserName + "', gender = '" + updateUserGender + "', age = " + updateUserAge + ", account = '" + updateUserAccount + "', password = '" + updateUserPassword + "' where id = " + updateUserId + ";";

                                statement.executeUpdate(updateUserSQL);
                                System.out.println("修改成功！");
                                break;
                            case "4": // 查询人员
                                ResultSet selectUsersResult = statement.executeQuery("select * from user;");
                                System.out.println("数据库中用户信息如下：");
                                while (selectUsersResult.next()) {

                                    //java.util.Date date = selectUsersResult.getDate(6);

                                    //java.util.Date date2 = new java.util.Date();


                                    System.out.println("ID：" + selectUsersResult.getInt(1)
                                            + "，姓名：" + selectUsersResult.getString(2)
                                            + "，性别：" + selectUsersResult.getString(3)
                                            + "，年龄：" + selectUsersResult.getInt(4)
                                            + "，账号：" + selectUsersResult.getString(5)
                                            + "，密码：" + selectUsersResult.getString(6));
                                }
                                break;
                            case "5": // 返回上一级
                                isGoBack = true;
                                break;
                            case "6": // 退出登录
                                break;
                            default:
                                System.out.println("输入有误，请重新输入！");
                        }

                        if (isGoBack) {
                            break;
                        }
                    }

                    break;
                case "2": // 图书管理：增删改查
                    break;
                case "3": // 退出登录
                    break;
                default:
                    System.out.println("输入有误，请重新输入！");
            }
        }
    }

    public static java.util.Date getDateByDay(int day) {
        java.util.Date date = new java.util.Date();//时间对象
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
            sdf.format(date);//获取当前系统时间
            Calendar calendar = Calendar.getInstance();//日历对象
            calendar.setTime(date);//设置当前时间
            calendar.add(Calendar.DAY_OF_MONTH, day);//加减day时间

            String datestr = sdf.format(calendar.getTime());//得到数据格式为String类型，比如：（2029/10/10 10:10:10)
            //如果想返回格式为String类型里面代码可以忽略，并修改返回类型，如果想返回类型为Date加下面代码
            //判断时间长度，如果没有时分秒在时间后面加“ 00:00:00"
            if (datestr.length() <= 10) {
                datestr = datestr + " 00:00:00";
            }
            return sdf.parse(datestr);//返回格式为date类型
        } catch (ParseException e) {
            return null;
        }
    }
}
